#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>

void handler(int signo)
{
    printf("%d 号信号，正在被捕捉\n",signo);
    while(1)
    {
        pid_t ret = waitpid(-1, NULL, WNOHANG);
        if(ret == 0) break;
    }
}

void Count(int cnt)
{
    while (cnt)
    {
        printf("cnt: %2d\r", cnt);
        fflush(stdout);
        cnt--;
        sleep(1);
    }
    printf("done\n");
}

int main()
{
    //signal(SIGCHLD,handler);
    signal(SIGCHLD, SIG_IGN);
    signal(SIGCHLD, SIG_DFL);
    
    printf("父进程 pid:%d ppid:%d\n",getpid(),getppid());
    pid_t id = fork();
    if(id==0)
    {
        printf("子进程 pid:%d ppid:%d\n",getpid(),getppid());
        //Count(5);
        exit(1);
    }
    while(1) sleep(1);
    return 0;
}

// #include<stdio.h>
// #include<signal.h>

// // volatile:保持内存可见性 
// volatile int quit=0;

// void handler(int signo)
// {
//     printf("%d 号信号，正在被捕捉\n",signo);
//     printf("quit: %d",quit);
//     quit=1;
//     printf("-> %d",quit);
// }

// int main()
// {
//     signal(2,handler);
//     while(!quit);
//     printf("正常退出\n");
//     return 0;
// }